package com.baoyouqun.domain.Enum;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;

import java.util.*;

/**
 * 简化版行业分类枚举（一级行业名称对应二级行业列表）
 */
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum IndustryEnum {

    // 互联网/AI
    INTERNET_AI("互联网/AI", new ArrayList<String>() {{
        add("互联网");
        add("电子商务");
        add("计算机软件");
        add("生活服务(O2O)");
        add("企业服务");
        add("医疗健康");
        add("游戏");
        add("社交网络与媒体");
        add("人工智能");
    }}),

    // 电子/通信/半导体
    ELECTRONIC_COMMUNICATION("电子/通信/半导体", new ArrayList<String>() {{
        add("半导体/芯片");
        add("电子/硬件开发");
        add("通信/网络设备");
        add("智能硬件/消费电子");
        add("运营商/增值服务");
        add("计算机硬件");
        add("电子/半导体/集成电路");
    }}),

    // 服务业
    SERVICE_INDUSTRY("服务业", new ArrayList<String>() {{
        add("餐饮");
        add("美容");
        add("美发");
        add("酒店/民宿");
        add("休闲/娱乐");
        add("运动/健身");
        add("保健/养生");
        add("家政服务");
        add("旅游/景区");
    }}),

    // 消费品/批发/零售
    CONSUMER_RETAIL("消费品/批发/零售", new ArrayList<String>() {{
        add("批发/零售");
        add("进出口贸易");
        add("食品/饮料/烟酒");
        add("服装/纺织");
        add("家具/家居");
        add("家用电器");
        add("日化");
        add("珠宝/首饰");
        add("家具/家电/家居");
    }}),

    // 房地产/建筑
    REAL_ESTATE("房地产/建筑", new ArrayList<String>() {{
        add("装修装饰");
        add("房屋建筑工程");
        add("土木工程");
        add("机电工程");
        add("物业管理");
        add("房地产中介/租赁");
        add("建筑材料");
        add("房地产开发经营");
        add("建筑设计");
    }}),

    // 教育培训
    EDUCATION("教育培训", new ArrayList<String>() {{
        add("培训/辅导机构");
        add("职业培训");
        add("学前教育");
        add("学校/学历教育");
        add("学术/科研");
    }}),

    // 广告/传媒/文化/体育
    MEDIA_SPORT("广告/传媒/文化/体育", new ArrayList<String>() {{
        add("文化艺术/娱乐");
        add("体育");
        add("广告/公关/会展");
        add("广播/影视");
        add("新闻/出版");
    }}),

    // 制造业
    MANUFACTURING("制造业", new ArrayList<String>() {{
        add("通用设备");
        add("专用设备");
        add("电气机械/器材");
        add("金属制品");
        add("非金属矿物制品");
        add("橡胶/塑料制品");
        add("化学原料/化学制品");
        add("仪器仪表");
        add("自动化设备");
    }}),

    // 专业服务
    PROFESSIONAL_SERVICE("专业服务", new ArrayList<String>() {{
        add("咨询");
        add("财务/审计/税务");
        add("人力资源服务");
        add("法律");
        add("检测/认证/知识产权");
        add("翻译");
        add("其他专业服务");
    }}),

    // 制药/医疗
    PHARMACEUTICAL("制药/医疗", new ArrayList<String>() {{
        add("医疗服务");
        add("医美服务");
        add("医疗器械");
        add("IVD");
        add("生物/制药");
        add("医药批发零售");
        add("医疗研发外包");
    }}),

    // 汽车
    AUTOMOTIVE("汽车", new ArrayList<String>() {{
        add("新能源汽车");
        add("汽车智能网联");
        add("汽车经销商");
        add("汽车后市场");
        add("汽车研发/制造");
        add("汽车零部件");
        add("摩托车/自行车制造");
        add("4S店/后市场");
    }}),

    // 交通运输/物流
    TRANSPORT_LOGISTICS("交通运输/物流", new ArrayList<String>() {{
        add("即时配送");
        add("快递");
        add("公路物流");
        add("同城货运");
        add("跨境物流");
        add("装卸搬运和仓储业");
        add("客运服务");
        add("港口/铁路/公路/机场");
        add("交通/运输");
    }}),

    // 能源/化工/环保
    ENERGY_ENVIRONMENT("能源/化工/环保", new ArrayList<String>() {{
        add("光伏");
        add("储能");
        add("动力电池");
        add("风电");
        add("其他新能源");
        add("环保");
        add("化工");
        add("电力/热力/燃气/水利");
        add("石油/石化");
    }}),

    // 金融（示例格式：名称对应列表）
    FINANCE("金融", new ArrayList<String>() {{
        add("互联网金融");
        add("银行");
        add("投资/融资");
        add("证券/期货");
        add("基金");
        add("保险");
        add("租赁/拍卖/典当/担保");
        add("信托");
        add("财富管理");
    }}),

    // 政府/非盈利机构/其他
    GOVERNMENT_OTHER("政府/非盈利机构/其他", new ArrayList<String>() {{
        add("农/林/牧/渔");
        add("非盈利机构");
        add("政府/公共事业");
        add("其他行业");
    }});


    // 枚举属性
    private final String industryName;       // 一级行业名称
    private final List<String> subIndustries; // 二级行业列表

    // 构造方法
    IndustryEnum(String industryName, List<String> subIndustries) {
        this.industryName = industryName;
        this.subIndustries = subIndustries;
    }

    // 核心方法：返回所有行业的映射关系（一级名称 -> 二级列表）
    public static Map<String, List<String>> getAllIndustryMap() {
        Map<String, List<String>> industryMap = new HashMap<>();
        for (IndustryEnum industry : values()) {
            industryMap.put(industry.industryName, industry.subIndustries);
        }
        return industryMap;
    }


    public static List<String> getSelfAndChildren(List<String> industryList) {
        if (industryList == null || industryList.isEmpty()) {
            return new ArrayList<>();
        }

        Set<String> resultSet = new HashSet<>();

        for (String industry : industryList) {
            // 标记当前行业是否已处理
            boolean processed = false;

            // 1. 先判断是否为一级行业：若为一级，添加自身 + 其二级行业（下一级）
            for (IndustryEnum enumItem : IndustryEnum.values()) {
                if (enumItem.getIndustryName().equals(industry)) {
                    resultSet.add(industry); // 自身
                    resultSet.addAll(enumItem.getSubIndustries()); // 下一级（二级行业）
                    processed = true;
                    break;
                }
            }
            if (processed) {
                continue;
            }

            // 2. 再判断是否为二级行业：若为二级，只添加自身（二级没有下一级）
            for (IndustryEnum enumItem : IndustryEnum.values()) {
                if (enumItem.getSubIndustries().contains(industry)) {
                    resultSet.add(industry); // 自身（无下一级）
                    processed = true;
                    break;
                }
            }
            // 3. 若既不是一级也不是二级，忽略
        }

        return new ArrayList<>(resultSet);
    }

    public static void main(String[] args) {
        // 测试场景1：输入一级行业
        List<String> test1 = List.of("金融");
        System.out.println("=== 测试1：输入一级行业 [金融] ===");
        System.out.println("结果：" + getSelfAndChildren(test1) + "\n");

        // 测试场景2：输入二级行业
        List<String> test2 = List.of("银行"); // 银行是金融的二级行业
        System.out.println("=== 测试2：输入二级行业 [银行] ===");
        System.out.println("结果：" + getSelfAndChildren(test2) + "\n");

        // 测试场景3：混合输入一级和二级行业（去重）
        List<String> test3 = Arrays.asList("互联网/AI", "电子商务"); // 电子商务是互联网/AI的二级行业
        System.out.println("=== 测试3：混合输入 [互联网/AI, 电子商务] ===");
        System.out.println("结果：" + getSelfAndChildren(test3) + "\n");

        // 测试场景4：输入多个不同行业
        List<String> test4 = Arrays.asList("服务业", "汽车");
        System.out.println("=== 测试4：输入多个行业 [服务业, 汽车] ===");
        System.out.println("结果：" + getSelfAndChildren(test4) + "\n");

        // 测试场景5：输入不存在的行业
        List<String> test5 = List.of("不存在的行业");
        System.out.println("=== 测试5：输入不存在的行业 ===");
        System.out.println("结果：" + getSelfAndChildren(test5) + "\n");

        // 测试场景6：输入空列表
        List<String> test6 = new ArrayList<>();
        System.out.println("=== 测试6：输入空列表 ===");
        System.out.println("结果：" + getSelfAndChildren(test6) + "\n");

        // 测试场景7：输入null
        System.out.println("=== 测试7：输入null ===");
        System.out.println("结果：" + getSelfAndChildren(null) + "\n");
    }

    // 获取一级行业名称
    public String getIndustryName() {
        return industryName;
    }

    // 获取二级行业列表
    public List<String> getSubIndustries() {
        return subIndustries;
    }
}
